///**
// * COPYRIGHT HangZhou 99Cloud Technology Company Limited
// * All right reserved.
// */
//package com.zfsmart.component.restful.config.msgback;
//
//import com.alibaba.csp.sentinel.adapter.servlet.callback.WebCallbackManager;
//import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
//import com.alibaba.csp.sentinel.slots.block.BlockException;
//import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
//import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
//import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
//import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
//import com.alibaba.csp.sentinel.slots.system.SystemBlockException;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.zfsmart.component.common.bean.restful.entity.RespMsg;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PostConstruct;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//
///**
// * @Description sentinel 限流熔断异常统一处理  SentinelResource和feignClient不需要再加fallback
// * @Author 薛铁琪
// * @CreateTime 2021/9/3 16:51
// * @Version 1.0
// */
//@Component
//public class CustomerBlockHandler implements BlockExceptionHandler {
//
//    @Override
//    public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception {
//        RespMsg sentinelErrorMsg = new RespMsg();
//        if (e instanceof FlowException) {
//            sentinelErrorMsg.setMsg("接口限流了");
//            sentinelErrorMsg.setCode(101);
//        } else if (e instanceof DegradeException) {
//            sentinelErrorMsg.setMsg("服务降级了");
//            sentinelErrorMsg.setCode(102);
//        } else if (e instanceof ParamFlowException) {
//            sentinelErrorMsg.setMsg("热点参数限流了");
//            sentinelErrorMsg.setCode(103);
//        } else if (e instanceof SystemBlockException) {
//            sentinelErrorMsg.setMsg("系统规则（负载/...不满足要求）");
//            sentinelErrorMsg.setCode(104);
//        } else if (e instanceof AuthorityException) {
//            sentinelErrorMsg.setMsg("授权规则不通过");
//            sentinelErrorMsg.setCode(105);
//        }
//        // http状态码
//        httpServletResponse.setStatus(200);
//        httpServletResponse.setCharacterEncoding("utf-8");
//        httpServletResponse.setHeader("Content-Type", "application/json;charset=utf-8");
//        httpServletResponse.setContentType("application/json;charset=utf-8");
//        // spring mvc自带的json操作工具，叫jackson
//        new ObjectMapper()
//                .writeValue(
//                        httpServletResponse.getWriter(),
//                        sentinelErrorMsg
//                );
//    }
//}
